<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title></title>
</head>
<body>
	<script type="text/javascript">
		// 1.字面意思
		//其实就是一个值，含义就是字面意思，也就是等号右边的值
		// console.log(1,'hello',true,'a',a) a不行，a是一个变量

		// 2.变量
		// 可以变化的量,从开发的角度来看，变量就是存储数据的容器
		//怎末声明一个变量  war + 变量名

		// ①声明一个变量,不赋值,不会报错,但返回undefind
		var a;
		console.log(a)

		// ②赋值
		a = 10
		console.log(a)

		//③变量的初始化
		var s = 100
		console.log(a)

		//④变量的重新赋值
		s = 50
		console.log(s)

		//⑤一次性声明多个变量
		var m = 6, n = 8
		console.log(m,n)

		//⑥变量不声明就使用，会报错
		// console.log(c)

		//⑦变量提升
		console.log(x) //undefind
		var x = "哈哈"
		console.log(x)
		// ===>
		var x;//变量的声明提升
		console.log(x)
		x = "哈哈"//赋值不提升
		console.log(x)

		/* 
			变量声明的提升，简称变量提升
			在es6以前的版本，js可以先使用变量，在定义变量，不会报错

			js是解释型语言，边解析边执行。但是在浏览器解析之前，会有一个预解析或者预处理的过程
					-----预解析的过程：
							对当前所有的变量（和函数），放到所有代码的最前面

							var a = 10;
							var b = 20;
							var c = 30;
							
							=========预解析：只提升声明，不提升赋值
							var a;
							var b;
							var c;

							a = 10;
							b = 20;
							c = 30;
		*/
	</script>

</body>
</html>